用光标移动函数gotoxy()实现方向键进行选择 您所在的位置:网站首页 c语言 方向键 用光标移动函数gotoxy()实现方向键进行选择

用光标移动函数gotoxy()实现方向键进行选择

2024-07-13 03:39| 来源: 网络整理| 查看: 265

coolblog(个人博客):http://blog.coolight.cool/

0.效果图

 

可以用方向键进行选择,看起来高级点而且可以防止乱输入。

 

1.引入:

这是我以前经常写的选择:

 

相信这应该也是很多人在控制台的时候会用的吧,

的确这个简单容易写。

 

但!是!

人要有理想,控制台也是

 

所以我开始想把它写成一般游戏那种上下选择的样子:

所以就有了这篇博文

 

 

//------接下来让我们进入正题-----

 

2.思路

 

注意:内容代码中使用了我自定义的命名空间coolfun

如果必要请自行修改

 

我们首先把这部分cout出来

 

然后我们需要使用到控制台里的光标移动函数gotoxy()(头文件:)

 

图中最后的白块就是光标,光标在哪,cout输出的东西就会从那开始。(应该都是懂的吧...)

 

注意:gotoxy()并不是c++标准库里的,windows.h里其实也没有这玩意,

所以我们需要借助来自己“写一个”。

void light_gotoxy(int x, int y) { COORD pos = { (short)x,(short)y }; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut, pos); }

这里的X是横坐标,Y 是纵坐标。

 

借助gotoxy()移动到选项前的空白

 

怎么移动呢??

 

直接看图里,选项“自动模式”是在第3行,我们编程老传统默认0为开始,所以这应该认为是第2行。

 

gotoxy(0,2);//把光标移动到第2(实际第3)行第0(实际第1)个。

 

然后在这里cout >>”的上下就可以了。

 

怎么样,听起来是不是简简单单!

 

但!是!

 

仅仅依靠这一个移动光标的函数是不够的,

 

因为在让选择的这部分字打印之前经常是会有一些其他的提示,

 

抑或是之前已经有了一些输出了,例如:

 

我们是要把它搞成一个可以经常用的函数

 

不可能每次需要就自己数数在哪一行开始输出选项并移动

 

所以我们需要一个函数来获取在这之前光标的位置。

 

light_getxy() :  获取当前光标所在位置

void light_getxy(int& x, int& y) { HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; GetConsoleScreenBufferInfo(hConsole, &csbi); x = csbi.dwCursorPosition.X; y = csbi.dwCursorPosition.Y; }

 

把行数+1那就是下一行,然后开始cout我们我们的选项就可以了。

 

到这解决了输出位置的问题了

 

具体的让我们来看看实现代码吧。

 

这就是我们这篇博文的主体函数:

 

template int switch_case(int case_num, const T* content_str) { int nowi = 1, nowx, nowy;//nowi 记录选择的选项编号 coolfun::light_getxy(nowx, nowy); cout 1) //在第一个再按上键会到最后一个 --nowi; else nowi = case_num; }break; case 80: //下 { if (nowi < case_num) //在最后一个按下键会到第一个 ++nowi; else nowi = 1; }break; case 13: //Enter键确定 { coolfun::light_gotoxy(nowx, nowy + nowi); cout 支持偏移< */ template int switch_case(int case_num, const T* content_str) { int nowi = 1, nowx, nowy;//nowi 记录选择的选项编号 coolfun::light_getxy(nowx, nowy); cout 1) //在第一个再按上键会到最后一个 --nowi; else nowi = case_num; }break; case 80: //下 { if (nowi < case_num) //在最后一个按下键会到第一个 ++nowi; else nowi = 1; }break; case 13: //Enter键确定 { coolfun::light_gotoxy(nowx, nowy + nowi); cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有